快速排序
- 算法思想:分治法,比大小再分区。
- 过程:
- 从数组中选出一个数,作为基准数。
- 分区:将比这个数大或等于的数全放到他的右边,小于他的数全放到他的左边。
- 再对左右区间重复第二步,直到各区间只有一个数。
public class QuickSort {
public static void main(String[] args) {
int[] arr = {10, 3, 5, 6, 1, 0, 100, 40, 50, 8};
System.out.println(Arrays.toString(quickSort(arr, 0, arr.length - 1)));
}
private static int[] quickSort(int[] arr, int start, int end) {
if (start < end) {
int index = getIndex(arr, start, end);
quickSort(arr, start, index - 1);
quickSort(arr, index + 1, end);
}
return arr;
}
private static int getIndex(int[] arr, int start, int end) {
int i = start;
int j = end;
int x = arr[i];
while (i < j) {
while (i < j && arr[j] >= x) {
j--;
}
if (i < j) {
arr[i] = arr[j];
i++;
}
while (i < j && arr[i] < x) {
i++;
}
if (i < j) {
arr[j] = arr[i];
j--;
}
}
return i;
}
}